<?php
namespace Mouta\AmistateBundle\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Mouta\AmistateBundle\Entity\Asunto;
use Mouta\AmistateBundle\Entity\Mensaje;

class MensajesController extends Controller
{
    public function EnviarAction()
    {
        $request = $this->getRequest();
        if($request->isXmlHttpRequest() && $request->getMethod() == "POST")
        {
            $txt_para = $this->getRequest()->get('para');
            $txt_asunto = $this->getRequest()->get('asunto');
            $txt_mensaje = $this->getRequest()->get('mensaje');
            $txt_asuntoId = $this->getRequest()->get('asuntoId');
            
            $em = $this->getDoctrine()->getEntityManager();
            $para = $em->getRepository('AmistateBundle:Usuario')->find($txt_para);
            
            $asunto = null;
            if($txt_asuntoId)
                $asunto = $em->getRepository('AmistateBundle:Asunto')->find($txt_asuntoId);
            
            if(is_null($asunto))
                $asunto = new Asunto();
            
            $user = $this->get('security.context')->getToken()->getUser();
            
            $asunto->setAsunto($txt_asunto);
            $asunto->setCreatedBy($user);
            $em->persist($asunto);
            
            $mensaje = new Mensaje($request);
            $mensaje->setAsunto($asunto);
            $mensaje->setBody($txt_mensaje);
            $mensaje->setCreatedAt(new \DateTime());
            $mensaje->setDe($user);
            $mensaje->setPara($para);
            $mensaje->setLeido(false);
            
            $em->persist($mensaje);
            $em->flush();
            return new Response(json_encode(array('success'=>true)));
        }else{
            return new Response(json_encode(array('fail'=>true)));
        }
    }
    
    public function marcarMensajesComoLeido($mensajes){
        $this->getDoctrine()->getEntityManager()->getRepository('AmistateBundle:Mensaje')->marcarMensajesComoLeido($mensajes);
    }
    
    public function MensajesAction($page)
    {
        $msgLimit = 2;
        $limit = 10;
        $offset = ($page-1) * $limit;
        
        $mensajesALeido = array();
        
        $em = $this->getDoctrine()->getEntityManager();
        $user = $this->get('security.context')->getToken()->getUser();
        $asuntos = $em->getRepository('AmistateBundle:Asunto')->getAsuntos($user->getId(),$limit,$offset);
        if(count($asuntos)==0 && $page>1){
            return $this->redirect( $this->generateUrl('mensajes',array('page'=>$page-1)));
        }
        $asuntosResult = array();
        foreach($asuntos as $asunto){
            $asunto->getMensajes()->clear();
            $mensajes = $em->getRepository('AmistateBundle:Mensaje')->getMensajes($user->getId(),$asunto->getId(),$msgLimit+1,0);
            $mensajes = array_reverse($mensajes);
            foreach($mensajes as $mensaje){
                $asunto->addMensaje($mensaje);
                if(!$mensaje->getLeido())
                {
                    if($user->getId() == $mensaje->getPara()->getId()){
                        $mensajesALeido[] = $mensaje->getId();
                    }
                }
            }
            $asuntosResult[] = $asunto;
        }
        $em->getRepository('AmistateBundle:Mensaje')->marcarMensajesComoLeido($mensajesALeido);
        
        $url_base = $this->get('router')->generate('mensajes');
        
        $cant_asuntos = $em->getRepository('AmistateBundle:Asunto')->getCantAsuntos($user->getId());
        $cant_pag = ceil($cant_asuntos/$limit);
        
        return $this->render('AmistateBundle:mensajes:mensajes.html.twig',array(
                'asuntos'=>$asuntosResult,
                'title'=> "Mensajes",
                'descripcion'=>"Mensajes",
                'msgLimit'=>$msgLimit,
                'page'=>$page,
                'url_base'=>$url_base,
                'cant_pag'=>$cant_pag,
                
            ));
    }
    
    public function MasMensajesAction($asunto,$page)
    {
        $limit = 20;
        $offset = (($page-1) * $limit)-18;
        
        $user = $this->get('security.context')->getToken()->getUser();
        $em = $this->getDoctrine()->getEntityManager();
        $mensajes = $em->getRepository('AmistateBundle:Mensaje')->getMensajes($user->getId(),$asunto,$limit+1,$offset);
        $mensajes = array_reverse($mensajes);
        $mensajesALeido = array();
        foreach($mensajes as $mensaje){
            if(!$mensaje->getLeido())
            {
                if($user->getId() == $mensaje->getPara()->getId()){
                    $mensajesALeido[] = $mensaje->getId();
                }
            }
        }
        $em->getRepository('AmistateBundle:Mensaje')->marcarMensajesComoLeido($mensajesALeido);
        
        return $this->render('AmistateBundle:mensajes:masMensajes.html.twig',array(
                'mensajes'=>$mensajes,
                'msgLimit'=>$limit,
                'page'=>$page+1,
                'asunto'=>$asunto,
            ));
    }
    
    public function ResponderMensajeAction(){
        $request = $this->getRequest();
        if($request->getMethod()=="POST"){
            $user = $this->get('security.context')->getToken()->getUser();
            $asunto = $request->get('asunto');
            $em = $this->getDoctrine()->getEntityManager();
            $asunto = $em->getRepository('AmistateBundle:Asunto')->find($asunto);
            $mensaje = $em->getRepository('AmistateBundle:Mensaje')->getMensajes($user->getId(),$asunto->getId(),1,0);
            $text = $request->get('text');
            $mensajeNew = new Mensaje($request);
            $mensajeNew->setAsunto($asunto);
            $mensajeNew->setBody($text);
            $mensajeNew->setDe($user);
            if($mensaje[0]->getDe()==$user){
                $mensajeNew->setPara($mensaje[0]->getPara());
            }else{
                $mensajeNew->setPara($mensaje[0]->getDe());
            }
            $em->persist($mensajeNew);
            $em->flush();
            return $this->render('AmistateBundle:mensajes:unmensaje.html.twig',array(
                "mensaje"=>$mensajeNew,
            ));
        }
    }
    
    public function EliminarAction(){
        $request = $this->getRequest();
        if($request->getMethod()=="POST"){
            $user = $this->get('security.context')->getToken()->getUser();
            $mensajeId = $request->get('id');
            $em = $this->getDoctrine()->getEntityManager();
            $mensaje = $em->getRepository('AmistateBundle:Mensaje')->find($mensajeId);
            if($mensaje){
                if($mensaje->getDe()->getId() == $user->getId() || $mensaje->getPara()->getId()== $user->getId()){
                    $mensaje->setBorradoPor($user);
                    $em->persist($mensaje);
                    $em->flush();
                }
            }
        }
        return new Response("");
    }
}